from game import zz_game
from zz import zz_log, zz_str, zz_code
import time


class Game(zz_game.ZZ_Game):
    def __init__(self, d):
        super().__init__(d)
        self.chou_xy = (351, 1443)
        self.task_exclude = [
            '充话费最高立减1元',
            '去开通彩铃业务',
            '免费领门诊金并升级',
            '累计使用能量泵',
            '在健康岛内移动',
            '领流量卡充值送话费',
            '开通话费自动充值',
            '闲鱼',
            '天猫',
            '爱奇艺',
            '免费领保障金并升级',
            '添加支付宝组件',
            "领取购物奖励",
            "旧衣回收",
        ]

    def get_name(self):
        return "健康岛"

    def offline_alert(self):
        """
        离线奖励弹窗
        """
        if not self.d.xpath('//android.widget.TextView[@text="离线奖励"]').wait(2):
            self.log_msg("离线奖励：无")
            return
        self.log_msg("存在离线奖励，点击领取双倍")
        self.d.xpath('//android.widget.TextView[@text="立即领取"]').click()
        self.d.sleep(2)
        # self.do_task_view()

    def play_task(self, timeout=30):
        self.log_msg(f"已进入浏览页面，开始浏览{timeout}秒")

        deadline = time.time() + timeout
        while True:
            self.swipe_up()
            self.d.sleep(1.5)
            self.swipe_up()
            self.d.sleep(1.5)
            self.swipe_down()
            self.d.sleep(1.5)
            self.swipe_down()
            self.d.sleep(1.5)
            if time.time() > deadline:
                self.log_msg("浏览完成")
                break
        self.d.press("back")

    def task_get(self):
        self.log_msg("点击开心收下")
        self.img_click("./game/img/淘宝农场_健康岛/task_get.png", 3)
        while self.img_exit('./game/img/淘宝农场_健康岛/task_get.png', 1):
            self.log_msg("点击开心收下-失败再试")
            self.img_click("./game/img/淘宝农场_健康岛/task_get.png", 3)

    def do_task(self):
        """
        做任务
        """
        self.img_click_if_exists('点击任务列表', "./game/img/淘宝农场_健康岛/game_main.png", "./game/img/淘宝农场_健康岛/task_main.png")
        self.log_msg("已进入任务列表")
        if self.d.xpath('//android.widget.TextView[@text="立即签到"]').wait(2):
            self.log_msg('点击立即签到')
            self.d.xpath('//android.widget.TextView[@text="立即签到"]').click()
            self.d.sleep(1)
            self.task_get()

        exclude_new = []
        current_title = ''  # 当前任务
        current_err_count = 0  # 运行次数
        while True:
            if self.d.xpath('//*[@text="立即领取"]').wait(1):
                self.log_msg("点击领取奖励")
                self.d.xpath('//*[@text="立即领取"]').click()
                self.d.sleep(2)
                self.task_get()
                continue

            tasks = self.d.xpath('//android.widget.TextView[@text="去完成"]').all()
            do = False
            for task in tasks:
                title = task.parent().parent().elem.getchildren()[1].attrib['text']
                if zz_str.is_null_or_empty(title):
                    title = task.parent().elem.getchildren()[1].attrib['text']
                if zz_str.is_null_or_empty(title):
                    continue

                if zz_code.arr_find(self.task_exclude, title, 1):
                    self.log_msg(f'{title}: 过滤')
                    continue
                if zz_code.arr_find(exclude_new, title, 1):
                    self.log_msg(f'{title}: 运行超过2次，过滤')
                    continue

                if current_title == title and not zz_str.contains(title, "30秒"):
                    current_err_count += 1
                    if current_err_count > 2:
                        # 2次失败，过滤
                        exclude_new.append(title)
                        continue
                current_title = title

                wait_s = 10
                if zz_str.contains(title, '30秒'):
                    wait_s = 32

                self.log_msg(f'{title}[{current_err_count}]，点击进入')
                task.click()
                self.play_task(wait_s)
                while True:
                    if self.img_exit("./game/img/淘宝农场_健康岛/task_main.png", 1):
                        break
                    self.log_msg("返回任务列表失败，尝试再返回")
                    self.d.press("back")

                do = True
                break
            if not do:
                self.log_msg("任务已完成")
                break
        self.log_msg("点击关闭任务列表")
        self.img_click('./game/img/淘宝农场_健康岛/task_close.png')

    def get_prize(self):
        self.log_msg("开始收取能量")
        self.alert_close_by_file('./game/img/淘宝农场_健康岛', 0.8, 'prize_')
        self.log_msg("收取能量-完成")

    def chou(self):
        """
        抽奖
        """
        self.log_msg("开始抽奖")
        index = 1
        while True:
            if self.img_exit("./game/img/淘宝农场_健康岛/chou_done.png", 2):
                self.log_msg("抽奖完成")
                break
            self.log_msg(f"第{index}次抽奖")
            self.d.click(self.chou_xy[0], self.chou_xy[1])
            self.d.sleep(5)
            index += 1
            if index % 5 == 0:
                self.get_prize()  # 领能量

    def swipe_right(self, duration=0.5, do_ka_check=True, end_x_rate=0.1):
        w, h = self.d.window_size()
        self.d.swipe(w / 2, h / 2, w, h / 2, 0.5)

    def main(self):
        self.d.sleep(10)
        if self.img_exit("./game/img/淘宝农场_健康岛/task_main.png", 2):
            self.log_msg("自动打开任务列表，先进行关闭")
            self.img_click('./game/img/淘宝农场_健康岛/task_close.png')

        self.log_msg("等待进入健康岛主界面")
        if not self.d.xpath('//*[@resource-id="com.alipay.mobile.nebulax.integration:id/textView_title"]').wait(30):
            # if not self.img_exit('./game/img/淘宝农场_健康岛/game_main.png', 30):
            return False
        self.log_msg("已进入健康岛主界面")

        self.offline_alert()

        for i in range(2):
            self.do_task()  # 做任务
            self.get_prize()  # 领能量

            # if zz_game.config_get('__account_id') != '136******30' and zz_game.config_get('__account_id') != '134******39':
            self.chou()  # 抽

    def handle_main(self):
        if zz_game.config_get('__task_jiankang') == 1:
            self.log_msg("任务已完成")
            return True

        self.log_msg("点击我的小程序")
        # self.img_click("./game/img/淘宝农场_健康岛/game_index.png")
        self.click_exists('//*[@text="我的小程序"]', 3)
        if not self.d.xpath('//android.widget.TextView[@text="悦动健康岛"]').wait(2):
            self.log_msg("进入失败")
            return False
        self.log_msg("已进入我的小程序，点击健康岛")
        self.d.xpath('//android.widget.TextView[@text="悦动健康岛"]').click()

        self.main()

        zz_game.config_set('__task_jiankang', 1)  # 标记完成

        self.close_game()
        self.d.sleep(2)
        self.d.press("back")
        return True
